package rbr.polideportivo;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.testng.annotations.Test;


public class PolideportivoTest {

	protected final Log logger = LogFactory.getLog(getClass());

	@Test
	public void pruebaAlquilarPista() {
		
//		Escenario de la prueba
		
		
		Pista pBaloncesto = new Pista("Baloncesto",8,10);
		Pista pPaddel = new Pista("Paddel",4,7);
		Pista pFutbol = new Pista("Futbol",10,15);
		
		Polideportivo polideportivo = new Polideportivo();
		
		polideportivo.instalacionesDeportivas = new InstalacionesDeportivas();
		polideportivo.instalacionesDeportivas.nombre = "Dos Hermanas.";
		
//		polideportivo.instalacionesDeportivas.servicioReserva = new ServicioReserva();

		polideportivo.instalacionesDeportivas.servicioReserva.pistas.add(pBaloncesto);
		polideportivo.instalacionesDeportivas.servicioReserva.pistas.add(pPaddel);
		polideportivo.instalacionesDeportivas.servicioReserva.pistas.add(pFutbol);
		
		
		List<Calendar> baloncestoReserva = new ArrayList<Calendar>();
		Calendar reservaHora = Calendar.getInstance();
		reservaHora.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, 13, 0);
		baloncestoReserva.add(reservaHora);
		reservaHora.set(Calendar.YEAR, Calendar.MONTH, Calendar.DAY_OF_MONTH, 20, 0);
		baloncestoReserva.add(reservaHora);
		
		polideportivo.instalacionesDeportivas.servicioReserva.reservadas.put(pBaloncesto, (ArrayList)baloncestoReserva);
		
//		Invocacion a la aplicacion
		
		String tipoPista = "Baloncesto";
		int horaAlquier = 14;

		String tipoPista2 = "NoExiste";
		int horaAlquier2 = 8;

		
		try{
			assert(polideportivo.alquilarPista(tipoPista,horaAlquier)): "La pista de Baloncesto y la hora son correctas";
		} catch (NoExistePistaException ex){
			logger.error("No existe la pista");
		} catch (NoDisponibleException ex2){
			logger.error("Salto excepcion, la pista no esta disponible");
		}
		
//		Salta excepcion	
		try{
			assert(!polideportivo.alquilarPista(tipoPista2,horaAlquier)): "La pista 'NoExiste' no existe, por lo tanto deberia fallar";
		} catch (NoExistePistaException ex){
			logger.error("No existe la pista");
		} catch (NoDisponibleException ex2){
			logger.error("Salto excepcion, la pista no esta disponible");
		}
		
//		Salta excepcion
		try{
			assert(!polideportivo.alquilarPista(tipoPista,horaAlquier2)): "La pista existe pero la hora no es adecuada por lo tanto deberia fallar";
		} catch (NoExistePistaException ex){
			logger.error("No existe la pista");
		} catch (NoDisponibleException ex2){
			logger.error("Salto excepcion, la pista no esta disponible");
		}
		

	
		
		
		
	}
	

}
